

// int main()
// {
//     FILE* fp = fopen("log.txt", "w");
//     if(!fp)
//     {
//         perror("fopen\n");
//     }

//     fputs("hello world\n", fp); //把字符写到文件里
//     fclose(fp); //关闭文件流
//     return 0;
// }

// // int main()
// // {
// //     FILE* fp = fopen("log.txt", "r");
// //     if(!fp)
// //     {
// //         perror("fopen fail!\n");
// //     }
// //     char buf[20];
// //     fgets(buf, 20, fp);
// //     printf("%s\n", buf);
// //     return 0;
// // }

// #include<stdio.h> 
// #include<sys/types.h>
// #include<unistd.h>

// int main()
// {
//     while(1)
//     {
//         printf("%d\n", getpid());
//         sleep(100);
//     }

//     return 0;
// }

#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>

// int main()
// {
//     int fd = open("log.txt", O_RDWR); //用open函数打开一个文件（只读权限），如果没有会自动创建，
//     if(fd < 0)  //读取失败
//     {
//         perror("open fail!\n");
//         return 1;
//     }

//     const char* msg  = "hello vscode\n";
//     char buf[1024];
//     while(1)
//     {
//         ssize_t size = read(fd, buf, strlen(msg)); //调用read函数，从fd里读，读到buf中，最后一个参数表示读多少个字节
//         if(size > 0)
//             printf("%s", buf);
//         else
//             break; //读完了可以退出
//     }

//     ssize_t count = write(fd, msg, strlen(msg));
//     if(count < 0)   //读取失败
//     {
//         perror("write fail!\n");
//     }
    

//     close(fd); //关闭文件
//     return 0;
// }

// int main()
// {
//     fputs("hello world!\n", stdout);
//     fputs("hello world!!\n", stderr);
//     return 0;
// }


// int main()
// {
//     //close(2);   //关闭2号fd
//     close(1);   //关闭1号fd
//     int fd = open("log.txt", O_CREAT | O_RDWR , 0666); //用open函数打开一个文件（只读权限），如果没有会自动创建，
//     if(fd < 0)  //读取失败
//     {
//         perror("open fail!\n");
//         return 1;
//     }
//     printf("fd是: %d\n", fd);
//     fflush(stdout); //清空输出缓冲区


//     close(fd);
//     return 0;
// }

// int main()
// {
//     int fd = open("log1.txt", O_RDWR | O_CREAT, 0666);
//     if(fd < 0)
//     {
//         perror("open fail!\n");
//         return 1;
//     }

//     int flag = dup2(fd, 1); //重定向
//     if(flag < 0)    perror("dup2 fail\n");

//     fputs("hello dup2\n", stdout);  //把字符串放到stdout里
//     return 0;
// }

int main()
{
    const char* msg0 = "hello printf\n";
    const char* msg1 = "hello fwrite\n";
    const char* msg2 = "hello write\n";

    printf("%s", msg0);
    fwrite(msg1, strlen(msg1), 1, stdout);
    write(1, msg2, strlen(msg2));

    fork(); //创建子进程
    return 0;
}